﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading;

namespace iNet
{
	/// <summary>
	/// 多國語言字串。
	/// </summary>
	public class MultiLanguageString
	{
		#region 欄位
		string _DefaultString;
		Dictionary<CultureInfo, string> _Strings = new Dictionary<CultureInfo, string>();
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 MultiLanguageString 執行個體。
		/// </summary>
		public MultiLanguageString()
		{ }
		/// <summary>
		/// 初始化新的 MultiLanguageString 執行個體。
		/// </summary>
		/// <param name="defaultString">預設字串。</param>
		public MultiLanguageString(string defaultString)
		{
			_DefaultString = defaultString;
		}
		#endregion
		#region DefaultString
		/// <summary>
		/// 取得或設定預設字串。
		/// </summary>
		public string DefaultString
		{
			get
			{
				return _DefaultString;
			}
			set
			{
				_DefaultString = value;
			}
		}
		#endregion
		#region explicit
		public static explicit operator string(MultiLanguageString str)
		{
			return str.ToString();
		}
		#endregion
		#region implicit
		public static implicit operator MultiLanguageString(string str)
		{
			return new MultiLanguageString(str);
		}
		#endregion
		#region this
		/// <summary>
		/// 取得指定語系的字串。
		/// </summary>
		/// <param name="culture">指定的語系所屬的文化特性，Null (Visual Basic 為 Nothing) 表示目前執行緒的文化特性。</param>
		public string this[CultureInfo culture]
		{
			get
			{
				//取得目前的語系
				if (culture == null)
					culture = Thread.CurrentThread.CurrentCulture;

				//查詢字串
				string str;
				if (_Strings.TryGetValue(culture, out str))
					return str;
				return _DefaultString;
			}
			set
			{
				//取得目前的語系
				if (culture == null)
					culture = Thread.CurrentThread.CurrentCulture;

				//設定字串
				if (value != null)
					_Strings[culture] = value;
				else
					_Strings.Remove(culture);
			}
		}
		#endregion
		#region ToString
		/// <summary>
		/// 取得符合目前語系的字串。
		/// </summary>
		/// <returns>符合目前語系的字串。</returns>
		public override string ToString()
		{
			return this[null];
		}
		#endregion
	}
}
